{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.0-alpha0\n",
      "sys.version_info(major=3, minor=7, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.0.3\n",
      "numpy 1.16.2\n",
      "pandas 0.24.2\n",
      "sklearn 0.20.3\n",
      "tensorflow 2.0.0-alpha0\n",
      "tensorflow.python.keras.api._v2.keras 2.2.4-tf\n"
     ]
    }
   ],
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "import tensorflow as tf\n",
    "\n",
    "from tensorflow import keras\n",
    "\n",
    "print(tf.__version__)\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, tf, keras:\n",
    "    print(module.__name__, module.__version__)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(5000, 28, 28) (5000,)\n",
      "(55000, 28, 28) (55000,)\n",
      "(10000, 28, 28) (10000,)\n"
     ]
    }
   ],
   "source": [
    "fashion_mnist = keras.datasets.fashion_mnist\n",
    "(x_train_all, y_train_all), (x_test, y_test) = fashion_mnist.load_data()\n",
    "x_valid, x_train = x_train_all[:5000], x_train_all[5000:]\n",
    "y_valid, y_train = y_train_all[:5000], y_train_all[5000:]\n",
    "\n",
    "print(x_valid.shape, y_valid.shape)\n",
    "print(x_train.shape, y_train.shape)\n",
    "print(x_test.shape, y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "scaler = StandardScaler()\n",
    "x_train_scaled = scaler.fit_transform(\n",
    "    x_train.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28, 1)\n",
    "x_valid_scaled = scaler.transform(\n",
    "    x_valid.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28, 1)\n",
    "x_test_scaled = scaler.transform(\n",
    "    x_test.astype(np.float32).reshape(-1, 1)).reshape(-1, 28, 28, 1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = keras.models.Sequential()\n",
    "model.add(keras.layers.Conv2D(filters=32, kernel_size=3,\n",
    "                              padding='same',\n",
    "                              activation='relu',\n",
    "                              input_shape=(28, 28, 1)))\n",
    "model.add(keras.layers.Conv2D(filters=32, kernel_size=3,\n",
    "                              padding='same',\n",
    "                              activation='relu'))\n",
    "model.add(keras.layers.MaxPool2D(pool_size=2))\n",
    "model.add(keras.layers.Conv2D(filters=64, kernel_size=3,\n",
    "                              padding='same',\n",
    "                              activation='relu'))\n",
    "model.add(keras.layers.Conv2D(filters=64, kernel_size=3,\n",
    "                              padding='same',\n",
    "                              activation='relu'))\n",
    "model.add(keras.layers.MaxPool2D(pool_size=2))\n",
    "model.add(keras.layers.Conv2D(filters=128, kernel_size=3,\n",
    "                              padding='same',\n",
    "                              activation='relu'))\n",
    "model.add(keras.layers.Conv2D(filters=128, kernel_size=3,\n",
    "                              padding='same',\n",
    "                              activation='relu'))\n",
    "model.add(keras.layers.MaxPool2D(pool_size=2))\n",
    "model.add(keras.layers.Flatten())\n",
    "model.add(keras.layers.Dense(128, activation='relu'))\n",
    "model.add(keras.layers.Dense(10, activation=\"softmax\"))\n",
    "\n",
    "model.compile(loss=\"sparse_categorical_crossentropy\",\n",
    "              optimizer = \"sgd\",\n",
    "              metrics = [\"accuracy\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d (Conv2D)              (None, 28, 28, 32)        320       \n",
      "_________________________________________________________________\n",
      "conv2d_1 (Conv2D)            (None, 28, 28, 32)        9248      \n",
      "_________________________________________________________________\n",
      "max_pooling2d (MaxPooling2D) (None, 14, 14, 32)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_2 (Conv2D)            (None, 14, 14, 64)        18496     \n",
      "_________________________________________________________________\n",
      "conv2d_3 (Conv2D)            (None, 14, 14, 64)        36928     \n",
      "_________________________________________________________________\n",
      "max_pooling2d_1 (MaxPooling2 (None, 7, 7, 64)          0         \n",
      "_________________________________________________________________\n",
      "conv2d_4 (Conv2D)            (None, 7, 7, 128)         73856     \n",
      "_________________________________________________________________\n",
      "conv2d_5 (Conv2D)            (None, 7, 7, 128)         147584    \n",
      "_________________________________________________________________\n",
      "max_pooling2d_2 (MaxPooling2 (None, 3, 3, 128)         0         \n",
      "_________________________________________________________________\n",
      "flatten (Flatten)            (None, 1152)              0         \n",
      "_________________________________________________________________\n",
      "dense (Dense)                (None, 128)               147584    \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 10)                1290      \n",
      "=================================================================\n",
      "Total params: 435,306\n",
      "Trainable params: 435,306\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 55000 samples, validate on 5000 samples\n",
      "Epoch 1/10\n",
      "55000/55000 [==============================] - 278s 5ms/sample - loss: 2.2478 - accuracy: 0.2384 - val_loss: 1.9430 - val_accuracy: 0.5306\n",
      "Epoch 2/10\n",
      "55000/55000 [==============================] - 261s 5ms/sample - loss: 0.9631 - accuracy: 0.6716 - val_loss: 0.8280 - val_accuracy: 0.6730\n",
      "Epoch 3/10\n",
      "55000/55000 [==============================] - 260s 5ms/sample - loss: 0.7073 - accuracy: 0.7456 - val_loss: 0.6281 - val_accuracy: 0.7760\n",
      "Epoch 4/10\n",
      "55000/55000 [==============================] - 257s 5ms/sample - loss: 0.6246 - accuracy: 0.7743 - val_loss: 0.5679 - val_accuracy: 0.7974\n",
      "Epoch 5/10\n",
      "55000/55000 [==============================] - 257s 5ms/sample - loss: 0.5634 - accuracy: 0.7954 - val_loss: 0.5228 - val_accuracy: 0.8058\n",
      "Epoch 6/10\n",
      "55000/55000 [==============================] - 257s 5ms/sample - loss: 0.5151 - accuracy: 0.8127 - val_loss: 0.5423 - val_accuracy: 0.7866\n",
      "Epoch 7/10\n",
      "55000/55000 [==============================] - 251s 5ms/sample - loss: 0.4796 - accuracy: 0.8261 - val_loss: 0.4426 - val_accuracy: 0.8436\n",
      "Epoch 8/10\n",
      "55000/55000 [==============================] - 251s 5ms/sample - loss: 0.4518 - accuracy: 0.8359 - val_loss: 0.4130 - val_accuracy: 0.8544\n",
      "Epoch 9/10\n",
      "55000/55000 [==============================] - 250s 5ms/sample - loss: 0.4294 - accuracy: 0.8448 - val_loss: 0.4002 - val_accuracy: 0.8580\n",
      "Epoch 10/10\n",
      "55000/55000 [==============================] - 250s 5ms/sample - loss: 0.4103 - accuracy: 0.8513 - val_loss: 0.4023 - val_accuracy: 0.8566\n"
     ]
    }
   ],
   "source": [
    "logdir = './cnn-selu-callbacks'\n",
    "if not os.path.exists(logdir):\n",
    "    os.mkdir(logdir)\n",
    "output_model_file = os.path.join(logdir,\n",
    "                                 \"fashion_mnist_model.h5\")\n",
    "\n",
    "callbacks = [\n",
    "    keras.callbacks.TensorBoard(logdir),\n",
    "    keras.callbacks.ModelCheckpoint(output_model_file,\n",
    "                                    save_best_only = True),\n",
    "    keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3),\n",
    "]\n",
    "history = model.fit(x_train_scaled, y_train, epochs=10,\n",
    "                    validation_data=(x_valid_scaled, y_valid),\n",
    "                    callbacks = callbacks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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tWpFq1atmD59OmPHjq29SouIiK8oOZczePBgSkpKOO+885gyZQoXXXQRLVu2JCsri+uuu47MzExGjhwJwP3338/hw4fp0qULmZmZLF++HIBHH32Uq6++mosvvpizzz670mvdc8893HvvvXTr1i2ciAHGjRvH9773Pbp27UpmZiZz584N77vpppto27Yt55133mn6BkRExGtqFy0nKSmJv//97xXuu/LKK8usN2rUiBdeeOGEoS+HDx/O8OHDTzj++LtjgD59+rB9+/bw+vTpweHIExISeOqpp3jqqadOOMeqVasYP358RHUREZHopOQcRXr06EHDhg158sknvQ5FREROIyXnKLJ+/XqvQxARkTqgZ84iIiI+o+QsIiLiM0rOIiIiPqPkLCIi4jNKziIiIj6j5FwDx88+Vd6uXbvo0qVLHUYjIiKxQslZRETEZ3z7nvNjax5j28HIJ5uIRKdmnfh1719Xun/KlCm0bduWn/3sZwBMmzaNhIQEli9fzqFDhyguLmb69OkMHTq0StctKChg4sSJrFu3Ljz612WXXcaWLVsYO3YsRUVFlJaWsnDhQlq1asUNN9xAdnY2gUCABx54IDxcqIiInBl8m5y9MHLkSH7xi1+Ek/P8+fNZsmQJkydPJiUlhf3793PRRRcxZMiQMjNPncqzzz6LmbF582a2bdvG5Zdfzvbt23n++ee54447uOmmmygqKiIQCLB48WJatWrF22+/DQQnxxARkTOLb5Pzye5wT5du3bqxb98+vv76a3JycmjatCnp6enceeedrFy5kri4OHbv3s3evXtJT0+P+LyrVq1i0qRJAHTq1Invf//7bN++nT59+vDII4+QnZ3Nddddx7nnnktGRga//OUv+fWvf83VV1/NpZdeerqqKyIiPqVnzuWMGDGCBQsW8PrrrzNy5Ehee+01cnJyWL9+PRs3biQtLe2EOZqr6yc/+Qlvvvkm9evX56qrrmLZsmV06NCBDRs2kJGRwf33389DDz1UK9cSEZHo4ds7Z6+MHDmS8ePHs3//ft577z3mz5/PWWedRWJiIsuXL+eLL76o8jkvvfRSXnvtNQYMGMD27dv58ssv6dixIzt37uQHP/gBkydP5ssvv+Sjjz6iU6dONGvWjJtvvpkmTZowc+bM01BLERHxMyXncjp37syRI0do3bo1Z599NjfddBPXXHMN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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_learning_curves(history):\n",
    "    pd.DataFrame(history.history).plot(figsize=(8, 5))\n",
    "    plt.grid(True)\n",
    "    plt.gca().set_ylim(0, 1)\n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 11s 1ms/sample - loss: 0.4447 - accuracy: 0.8417\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[0.4446736605644226, 0.8417]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.evaluate(x_test_scaled, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
